.. :validated: 3.1.0

Обновление первого контроллера домена
=====================================

.. attention::

   После обновления первого контроллера домена возникает ошибка на портале управления: «Операция завершена с ошибкой. Операция с Zabbix завершилась с ошибкой». Она ожидаема и устранится после обновления подсистемы мониторинга.

Все обновления между версиями возможны только в рамках одного исполнения: сертифицированного или несертифицированного. Для обновления до версии другого исполнения необходимо полностью развернуть систему заново.
    
Подготовка к обновлению
-----------------------

.. attention::

   Обновление операционной системы на контроллерах домена не является обязательным этапом процесса обновления **ALD Pro**.
   Необходимость обновления ОС определяется матрицей совместимости **ALD Pro** и выбранным сценарием (см. :ref:`updating_subsystems`).
   Нижеприведенные шаги 1-3 выполняются только в случае, есть сценарий обновления требует обновления ОС.

Перед обновлением **ALD Pro** важно учитывать:

* Обновление продукта **ALD Pro** необходимо выполнять на контроллере домена от имени учетной записи администратора системы с высоким уровнем целостности.

* Обновления следует начинать с **первого** Контроллера Домена. Соответственно, все команды должны вводиться в его консоли (терминале).

* В **ALD Pro** реализовано разграничение доступа к функциям системы. При обновлении системы до актуальной версии администратору должна быть назначена роль **ALDPRO — Main Administrator** (пользователю **admin** роль назначается автоматически), также учетную запись администратора необходимо добавить в группу **ald trust admin**. Остальным пользователям (администраторам) системы соответствующие роли при необходимости нужно назначать в ручном режиме. Подробная информация о работе ролевого доступа находится в Справочном Центре Портала Управления в подразделе **Роли и права доступа** — **Роли в системе**.

Программное обеспечение ОС должно совпадать на контроллерах домена, между которыми настроена репликация. На первом КД необходимо:

1. Убедиться, что в качестве источников пакетов для ОС зарегистрированы основной репозиторий (``main``) и репозиторий с обновлениями основного репозитория (``repository-update``), а в файле ``/etc/apt/sources.list`` указаны строки формата ниже. При необходимости — добавить их, если имеются другие записи, то закомментировать их или удалить:

.. code-block:: bash

   deb https://dl.astralinux.ru/astra/frozen/1.7_x86-64/<номер_обновления_ОС_СН>/repository-main 1.7_x86-64 main non-free contrib
   deb https://dl.astralinux.ru/astra/frozen/1.7_x86-64/<номер_обновления_ОС_СН>/repository-update 1.7_x86-64 main non-free contrib

При использовании 1.7.ххх с установленным срочным оперативным обновлением (UU) необходимо дополнительно указать **frozen** репозиторий, соответствующий обновлению.

Подробнее в разделе :ref:`connecting_repositories:`.

2. Обновить пакеты ОС, выполнив в терминале команду:

.. code-block:: bash

   sudo apt update && sudo apt install astra-update -y && sudo astra-update -A -r -T

3. Для корректной работы функций репликации на КД необходимо импортировать новые конфигурации службы каталога, выполнив команды:

.. attention::

   Выполнение команды ipa-server-upgrade на ОС версии 1.7.8 может завершиться ошибкой. В таком случае необходимо повторять выполнение команды до тех пор, пока она не завершится успешно.

.. code-block:: bash

   sudo ipa-server-upgrade
   sudo ipactl restart

.. important::
    
   После обновления ОС **Astra Linux** с ранних версий до версии 1.7.8 на компонентах ниже, использующих СУБД **PostgreSQL**, необходимо выполнить действия, описанные в **Руководство Администратора. Часть 2**, раздел **После обновления ОС Astra Linux до версии 1.7.8 не работает вход на портал управления**, так как после обновления ОС для СУБД **PostgreSQL** используются устаревшие конфигурационные файлы. Компоненты, в которых возникает ошибка:
   
   * Контроллеры Домена (в том числе резервные);
   * Подсистема «Сетевой Репозиторий»;
   * Подсистема «Установка ОС по сети TFTP + PXE»;
   * Подсистема «Сервер Мониторинга».

.. _check_before_update:

Проверки, которые необходимо выполнить до начала обновления ALD Pro
-------------------------------------------------------------------

Начиная с версии 3.2.0, утилита ``aldpro-server-install`` выполняет валидацию по умолчанию перед установкой или обновлением контроллера домена.

В рамках валидации проверяются системные требования и корректность вводимых параметров, что позволяет заранее выявить несоответствия и снизить риск ошибок в процессе установки и обновления.

.. important::

Перед запуском обновления ALD Pro на КД необходимо выполнить проверки:

1. Перезапуск служб **IPA**. Необходимо убедиться, что все службы **FreeIPA** стартуют успешно. Выполняется на первом КД и на резервных КД:

.. code-block:: bash

   sudo ipactl restart
   sudo ipactl status

2. Проверка работоспособности основных служб: ``krb5-kdc, dirsrv, bind9-pkcs11, aldpro-salt-minion, sssd``. Полное название службы ``dirsrv`` содержит имя домена - ``dirsrv@ALD-COMPANY-LAN`` (пример). Нельзя начинать обновление, если какие-то из служб не функционируют. Выполняется на первом КД и резервных КД:

.. code-block:: bash
   
   systemctl status krb5-kdc 
   systemctl status dirsrv@ALD-COMPANY-LAN
   systemctl status bind9-pkcs11 
   systemctl status aldpro-salt-minion 
   systemctl status sssd
   
3. Проверка получения билета Kerberos и информации о КД в системе DNS. Выполняется на первом КД и резервных КД:

.. code-block:: bash

   kinit имя_пользователя
   nslookup fqdn_контроллера_домена

4. Отключение служб, связанных с ролями: ``celerybeat`` и ``aldpro-roles-management``. Отключение производится на контроллере домена:

.. code-block:: bash

   sudo systemctl disable --now celerybeat aldpro-roles-management

5. Проверка подключенных репозиториев, отключение лишних репозиториев. Необходимо убедиться, что при доступе к репозиториям не происходит ошибок и задержек. Выполняется на первом КД и резервных КД:

.. code-block:: bash

   Редактирование *.list файлов в каталоге /etc/apt/ и его подкаталогах
   sudo apt update

6. Отключение плагина ``389ds - compat``. Позволяет ускорить выполнение обновления. Выполняется на первом КД и резервных КД:

.. code-block:: bash

   sudo ipa-compat-manage status
   sudo ipa-compat-manage disable

7. Деактивация плагина ``winbind_krb5_locator``. Выполняется на резервных КД:

.. code-block:: bash

   sudo update-alternatives --install /usr/lib/x86_64-linux-gnu/krb5/plugins/libkrb5/winbind_krb5_locator.so winbind_krb5_locator.so /dev/null 100

8. Отсутствие двух подсистем на одном хосте. Выполняется перед началом обновления первого контроллера домена.

9. Обновление модуля синхронизации не запущено одновременно с обновлением Системы. Обновление модуля синхронизации и миграцию его баз данных рекомендуется проводить после обновления всех резервных КД.

10. Проверка репликации и отсутствия односторонних соглашений о репликации:

.. code-block:: bash

   dsconf ldap://<имя_КД> -D 'cn=Directory Manager' repl-conflict list dc=ald,dc=company,dc=lan
   dsconf ldap://<имя_КД> -D 'cn=Directory Manager' repl-agmt list --suffix dc=ald,dc=company,dc=lan
   ds-replcheck online -D "cn=Directory Manager" -W -m ldap://<имя_КД_1> -r ldap://<имя_КД_2> -b "<dc=доменный,dc=суффикс>" # <имя_КД_1> и <имя_КД_2> - это контроллеры домена, между которыми установлены соглашения о репликации

11. Проверка наличия атрибутов ``envvar`` и ``ipaLocation``. Выполняется на первом контроллере домена и на резервных:

.. code-block:: bash

   ldapsearch -b "cn=masters,cn=ipa,cn=etc,dc=aldpro,dc=company,dc=lan" -s one ipaLocation envvar

12. Перезагрузка КД с последующей экспресс-проверкой работы служб (повторить пункты 1 и 2 данного раздела). Выполняется непосредственно перед началом обновления первого или резервных контроллеров домена.

Обновление
----------

.. attention::

   При обновлении может возникнуть ошибка, связанная с дефисом в коротком имени компьютера. В случае возникновения ошибки при выполнении команды ``aldpro-server-install --update`` или для ее предотвращения следует ознакомиться с БЮЛЛЕТЕНЬ №2025-1113ALD01MD в Личном Кабинете **ALD Pro**.

Для установки обновления **ALD Pro** на первом контроллере домена необходимо подключить репозиторий **aldpro**, выполнив в терминале команды:

.. code-block:: bash

   sudo nano /etc/apt/sources.list.d/aldpro.list

Полностью заменить содержимое файла ``aldpro.list``:

.. code-block:: bash

   deb https://dl.astralinux.ru/aldpro/frozen/01/3.2.0/ 1.7_x86-64 main base

Обновить индекс пакетов, выполнив в терминале команду:

.. code-block:: bash

   sudo apt update

Обновить пакеты продукта **ALD Pro** командой:

.. code-block:: bash

   sudo apt dist-upgrade -y -o Dpkg::Options::=--force-confnew

В процессе выполнения обновления, при появлении сообщения с подтверждением изменения файла настройки пакета, необходимо выбрать **Установить версию, предлагаемую сопровождающим пакета**, введя в командной строке **Y**.

Перезагрузить контроллер, выполнив в терминале команду:

.. code-block:: bash

   sudo reboot

После перезагрузки первого контроллера домена и проверки статуса прохождения аутентификации для завершения обновления первого контроллера домена необходимо выполнить одну из команд обновления ниже.

Если на первом КД не установлены модуль синхронизации и модуль глобального каталога:

.. code-block:: bash

   sudo aldpro-server-install -d ald.company.lan -n dc-1 --ip 10.0.1.11 --update

Если на первом КД установлены модуль синхронизации и модуль глобального каталога:

.. code-block:: bash

   sudo aldpro-server-install -d ald.company.lan -n dc-1 --ip 10.0.1.11 --update --setup_syncer --setup_gc

Если на первом КД установлен только модуль синхронизации:

.. code-block:: bash

   sudo aldpro-server-install -d ald.company.lan -n dc-1 --ip 10.0.1.11 --update --setup_syncer

Если на первом КД установлен только модуль глобального каталога:

.. code-block:: bash

   sudo aldpro-server-install -d ald.company.lan -n dc-1 --ip 10.0.1.11 --update --setup_gc

где:

* ``-d`` (domain) — имя домена;
* ``-n`` (name) — имя сервера;
* ``-p`` (password) — получить пароль администратора домена из командной строки (небезопасно);
* ``--ip`` — ip адрес контроллера домена. Адрес требуется указывать явно, если на контроллере домена активно несколько сетевых интерфейсов;
* ``--update`` — ключ запуска процесса обновления;
* ``--setup_gc`` — ключ указывает, что нужно настроить установленный ранее модуль глобального каталога;
* ``--setup_syncer`` — ключ указывает, что нужно настроить установленный ранее модуль синхронизации.

Описание параметров скрипта можно получить с помощью ключа ``-h``.

После ввода команды система запросит ввести пароль администратора домена. При обновлении контроллера домена **ALD Pro** до версии 3.2.0, с ранее установленным модулем синхронизации, процесс миграции базы данных (БД) может занять продолжительное время. Если БД содержит 30000 пользователей и более, то рекомендуется сначала обновить **ALD Pro**, затем, выбрав отдельный интервал профилактики, обновить модуль синхронизации, согласно :ref:`syncer_update`.

Если требуется произвести обновление ALD Pro с одновременной инициализацией ранее неустановленного модуля глобального каталога и/или модуля синхронизации, то следует обратиться к соответствующим разделам :ref:`gc_update` и :ref:`syncer_update`.

Для синхронизации модулей **SaltStack** необходимо выполнить команду:

.. code-block:: bash

   sudo systemctl restart aldpro-salt-minion

Ошибки, которые могут возникнуть при обновлении системы, описаны в разделе **Руководство администратора. Часть 2** → **Известные проблемы**.

.. _gc_update:

Обновление с установкой Глобального Каталога
--------------------------------------------

При необходимости инициализации модуля глобального каталога одновременно с обновлением **ALD Pro** на первом контроллере домена необходимо предварительно установить пакет глобального каталога из репозитория **ALD Pro** и добавить ключ  ``--setup_gc`` в команду обновления ``aldpro-server-install``.

Команда обновления контроллера домена с инициализацией модуля глобального каталога:

.. code-block:: bash

   sudo apt update && sudo apt install aldpro-gc
   sudo aldpro-server-install -d ald.company.lan -n dc-1 --ip 10.0.1.11 --update --setup_gc

После ввода команды система запросит ввести пароль администратора домена.

.. _syncer_update:

Обновление с установкой Модуля Синхронизации
------------------------------------------------------------------

При необходимости инициализации модуля синхронизации одновременно с обновлением **ALD Pro** на первом контроллере домена необходимо предварительно установить пакет модуля синхронизации из репозитория **ALD Pro** и добавить ключ  ``--setup_syncer`` в команду обновления ``aldpro-server-install``.

Модуль синхронизации всегда устанавливается на первый контроллер домена. При установке модуля синхронизации контроллер домена **ALD Pro** добавляется в карточку **Контроллеры домена ALD** автоматически.

При установке модуля синхронизации создается учетная запись имеющая вид ``syncer/dc01.<имя домена>@<ИМЯ ДОМЕНА>``. Данная УЗ является сервисной и используется для работы модуля синхронизации. Пароль данной УЗ является бессрочным, что делает работу модуля синхронизации более стабильной и устойчивой.

Команда обновления контроллера домена с инициализацией модуля синхронизации:

.. code-block:: bash
    
   sudo apt update && sudo apt install aldpro-syncer
   sudo aldpro-server-install -d ald.company.lan -n dc-1 --ip 10.0.1.11 --update --setup_syncer

После ввода команды система запросит ввести пароль администратора домена.

.. _check_after_update:

Проверки, которые необходимо выполнить после обновления
--------------------------------------------------------------

После завершения обновления системы необходимо выполнить следующие проверки, чтобы убедиться, что обновление выполнено корректно и **ALD Pro** готов к работе.

1. Проверить информацию на карточке КД (**Управление доменом** → **Сайты и службы** → **Контроллеры домена** или **Управление доменом** → **Общая информация** → **Состав системы**). Если КД находится в состоянии **Установлено**, **Ошибка**, не указана версия, то изучить логи:

- */var/log/ipaupgrade.log* - первый КД,
- */var/log/aldpro-salt/subsystem.log* - резервные контроллеры домена.

2. Проверить работоспособность основных служб: ``krb5-kdc, dirsrv, bind9-pkcs11, aldpro-salt-minion, sssd``. Полное название службы ``dirsrv`` содержит имя домена - ``dirsrv@ALD-COMPANY-LAN`` (пример). Выполняется на первом КД и резервных КД:

.. code-block:: bash
    
   systemctl status krb5-kdc 
   systemctl status dirsrv@ALD-COMPANY-LAN
   systemctl status bind9-pkcs11 
   systemctl status aldpro-salt-minion 
   systemctl status sssd
   sudo aldproctl status

3. Остановить и замаскировать службу ``salt-minion``, если она не используется:

.. code-block:: bash

   sudo systemctl stop salt-minion
   sudo systemctl disable salt-minion
   sudo systemctl mask salt-minion

4. Проверить наличие конфликтов репликации **LDAP**:

.. code-block:: bash

   dsconf ldap://<имя_КД> -D 'cn=Directory Manager' repl-conflict list <доменный суффикс>

5. Проверить работоспособность ролевой модели. Проверка осуществляется в портале управления путем просмотра списка ролей и их статуса, назначения роли или ролей пользователю с последующей проверкой доступа к разделам портала. Наличие конфликтов у записей в **LDAP**, имеющих отношение к ролям, привилегиям или разрешениям, также сигнализирует о возможных ошибках в функционировании ролевой модели. Если на первом КД ролевая модель работает, то на резервных контроллерах домена проверку можно осуществлять сравнением данных этого резервного контроллера домена с первым КД (``ds-replcheck``).

6. Обновить модуль синхронизации и проверить миграцию данных (идентификаторы участников групп (должны быть ``ObjectGUID`` из **MS AD**), список ошибок до обновления и миграции и после) -- выполняется только на первом КД, т.к. модуль синхронизации может быть установлен только на него:

.. code-block:: bash

   sudo -u postgres psql -d syncer -c "SELECT schema_tracer.tracer_objects.name,schema_provider.ipa_code_error.error_message, schema_provider.ipa_code_error.error_name, schema_provider.virtual_tree.error_id, COUNT(*) FROM schema_provider.virtual_tree JOIN schema_provider.ipa_code_error ON schema_provider.virtual_tree.error_id =  schema_provider.ipa_code_error.id JOIN schema_tracer.tracer_objects ON schema_provider.virtual_tree.object_class_id = schema_tracer.tracer_objects.id WHERE error_id <> 90  GROUP BY schema_tracer.tracer_objects.id,schema_provider.ipa_code_error.error_message, schema_provider.ipa_code_error.error_name, schema_provider.virtual_tree.error_id ORDER BY schema_tracer.tracer_objects.name;"
